From: Dan Winship Date: Wed, 24 Mar 2010 17:27:21 +0000 (-0400) Subject: Fix dragging of App Well and Places icons X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~10247 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=a8fa8a498a81b15435d8382e6d5094581221fd47;p=gnome-shell.git Fix dragging of App Well and Places icons The hover rewrite added a freeze/thaw_notify to st_clickable_leave_event() (to match the one already in st_clickable_enter_event()), which broke code in two places that assumed "pressed" would still be TRUE when "hover" changed to FALSE. Fix that by exposing the "held" property as well. --- diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js index a8f878efa..6b882320c 100644 --- a/js/ui/appDisplay.js +++ b/js/ui/appDisplay.js @@ -451,7 +451,7 @@ AppWellIcon.prototype = { _onHoverChange: function(actor) { let hover = this.actor.hover; if (!hover) { - if (this.actor.pressed && this._dragStartX != null) { + if (this.actor.held && this._dragStartX != null) { this.actor.fake_release(); this._draggable.startDrag(this._dragStartX, this._dragStartY, global.get_current_time()); diff --git a/js/ui/placeDisplay.js b/js/ui/placeDisplay.js index 99aecec48..cd9167fee 100644 --- a/js/ui/placeDisplay.js +++ b/js/ui/placeDisplay.js @@ -476,7 +476,7 @@ DashPlaceDisplayItem.prototype = { _onHoverChanged: function(button) { let hover = button.hover; if (!hover) { - if (button.pressed && this._dragStartX != null) { + if (button.held && this._dragStartX != null) { button.fake_release(); this._draggable.startDrag(this._dragStartX, this._dragStartY, global.get_current_time()); diff --git a/src/st/st-clickable.c b/src/st/st-clickable.c index 2ff875817..79192cfc5 100644 --- a/src/st/st-clickable.c +++ b/src/st/st-clickable.c @@ -32,7 +32,8 @@ enum { PROP_0, PROP_ACTIVE, - PROP_PRESSED, + PROP_HELD, + PROP_PRESSED }; static guint st_clickable_signals [LAST_SIGNAL] = { 0 }; @@ -223,6 +224,9 @@ st_clickable_get_property (GObject *object, case PROP_ACTIVE: g_value_set_boolean (value, self->priv->active); break; + case PROP_HELD: + g_value_set_boolean (value, self->priv->held); + break; case PROP_PRESSED: g_value_set_boolean (value, self->priv->pressed); break; @@ -277,6 +281,20 @@ st_clickable_class_init (StClickableClass *klass) FALSE, G_PARAM_READWRITE)); + /** + * StClickable:held + * + * This property tracks whether the button has the pointer grabbed, + * whether or not the pointer is currently hovering over the button. + */ + g_object_class_install_property (gobject_class, + PROP_HELD, + g_param_spec_boolean ("held", + "Held state", + "Whether the mouse button is currently pressed", + FALSE, + G_PARAM_READABLE)); + /** * StClickable:pressed *